package main

import "fmt"

//切片
func main() {
	//[low:high:max] low:下标起点， high:下标终点 ,[a(low),b(high)) 左闭右开
	//len=high-low 长度
	//cap=max-low  容量
	a := []int{1, 2, 3, 4, 5}
	s := a[0:3:5]
	fmt.Printf("a=%T\n", a)
	fmt.Printf("s=%T\n", s)
	fmt.Printf("len(s)=%v\n", len(s))
	fmt.Printf("cap(s)=%v\n", cap(s))
	//区别：数组[]里是固定的，长度不能修改，len,cap固定
	//切片[]里面为空，或者...，切片的len和cap是可变的
	k := append(a, 888) //返回的是拷贝
	fmt.Printf("a=%v\n", a)
	fmt.Printf("k=%v\n", k)

	//几种声明方式
	s2 := make([]int, 5, 10) // make(切片类型，长度，容量)
	fmt.Printf("s2=%v\n", s2)
	s3 := make([]int, 5) // 没有指定容量，容量和长度一样
	fmt.Printf("s3=%v\n", s3)
	//复制切片
	copy(s3, a)
	fmt.Printf("s3=%v\n", s3)
	//从0开始取3个元素，容量也是3
	s4 := s3[:3]
	fmt.Printf("s4=%v\n", s4)
	//从下标2开始一直到结尾
	s5 := s3[2:]
	fmt.Printf("s5=%v\n", s5)
	//超过原来的容量，以2倍容量进行扩容
	//切片参数传递是引用传递，通过元素地址操作，内部变化要影响整个切片

}
